package com.bamboo.tools.encrypts

import android.util.Base64
import java.net.URLDecoder
import java.net.URLEncoder
import java.nio.charset.Charset

/**
 * 项目名称：Tools
 * @Author bamboolife
 * 邮箱：core_it@163.com
 * 创建时间：2021/7/23 9:34 上午
 * 描述：编码/解码相关扩展函数
 * 注释：Base64：（Base64编码算法不算是真正的加密算法。）
 *      Base64是一种基于64个可打印字符来表示二进制数据的表示方法。
 *      Base64常用于在通常处理文本数据的场合，表示、传输、存储一些二进制数据。
 */
/**
 * base64编码
 */
fun String.base64Encode2Str(
    charset: Charset = Charsets.UTF_8,
    flags: Int = Base64.NO_WRAP
): String = String(Base64.encode(this.toByteArray(), flags))

fun String.base64Encode(flags: Int = Base64.NO_WRAP): ByteArray =
    Base64.encode(this.toByteArray(), flags)

fun ByteArray.base64Encode2Str(charset: Charset = Charsets.US_ASCII, flags: Int = Base64.NO_WRAP): String = String(Base64.encode(this, flags), charset)

fun ByteArray.base64Encode(flags: Int = Base64.NO_WRAP): ByteArray = Base64.encode(this, flags)


/**
 * Base64解码
 *
 */
fun String.base64Decode2Str(charset: Charset = Charsets.US_ASCII, flags: Int = Base64.NO_WRAP): String = String(Base64.decode(this, flags), charset)

fun String.base64Decode(flags: Int = Base64.NO_WRAP): ByteArray = Base64.decode(this, flags)

fun ByteArray.base64Decode2Str(charset: Charset = Charsets.US_ASCII, flags: Int = Base64.NO_WRAP): String = String(Base64.decode(this, flags), charset)

fun ByteArray.base64Decode(flags: Int = Base64.NO_WRAP): ByteArray = Base64.decode(this, flags)


/**
 * UrlEncode/Decode
 */

fun String.urlEncode(charset: String = "UTF-8"): String = URLEncoder.encode(this, charset)

fun String.urlDecode(charset: String = "UTF-8"): String = URLDecoder.decode(this, charset)